苦しんで覚えるC言語 4.2 基本的な計算 P82 – P90

基本的な計算

計算とその結果の表示

C言語では計算式を記入することでコンピュータが演算をしてくれます。
演算のルールは、小学生の時に学んだ四則演算が基本となります。

例えば、以下プログラムでは、100 + 200を加算した結果を、resultという名前のintという数値格納の変数(=入れ物)に入れて終了しています。

表示処理は何もありませんので、resultという変数には300が格納されていると思いますが、このプログラムのままでは確認する術がありません。

int main(void)
{
    int result;

    result = 100 + 200;

    return 0;
}

なので、製品搭載のC言語では表示は、ほぼ不要と言いましたが学習用にprintf関数を用いて、計算結果がどうなっているのかを見ていきましょう。


ちなみに、ptintf関数の中身を解説しておきますと、
C言語では、” ” の範囲は文字列扱いでしたね? ここでは、%d\n と書かれています。

%dは、resultという変数の中身の数値を文字として表示する指定になります。
\nは、改行です。
resultの中身(=300)を文字列として表示して、改行してください。というのがprintfに与えた指示になります。
C言語が馴染んできた頃に改めてprintf関数を学んでも遅くないので、「そうなのかぁ」ぐらいで理解をいただければ大丈夫です。

int main(void)
{
    int result;

    result = 100 + 200;

    printf("%d\n", result);

    return 0;
}

過去にも使用したブラウザ上でプログラムが動作する環境を提供してくれいている下記を使用します。

https://paiza.io/ja/projects/new?language=c

上記のプログラムをコピーして貼り付けした後、実行(左下の実行ボタンを押下)をしてみてください。

コピペが間違っていなければ、ページの中央上部の赤丸部に「Success」と表示され、ページ左下の赤丸部に「300」と表示されていると思います。
100+200 = 300ということで問題なさそうです。

四則演算の種類

上記では加算処理を行いましたが、他も同様のイメージになります。

C言語での記述数学上の記述内容
++加算
減算
*×乗算
/÷除算
%mod剰余算

 先ほど用いた加算処理のプログラムの5行目を好きな演算処理に変えてみて、ブラウザ上の実行ツールで確認をしてみてください。

result = 100 + 200;

この部分を例えば、

result = 10 * 20;

だったり、

result = 10 / 3;

など、好きなように変えて左下の表示される計算結果が意図通りかどうかを試してみてください。

10 * 20は200になりました。
10 / 3は3になりました。

どうでしょうか?おかしい結果が出てきているものがあります。
10 / 3は3ではありませんが、3として結果表示されています。
本来は、3.3333・・・という割り切れない結果になるはずです。

この理由は2つあります。
理由1・・・C言語では、intという数値型の入れ物は整数しか扱えない
理由2・・・整数値同士の計算は四捨切り捨てになる

つまり、10 / 3 はどちらも整数値同士の計算なので、結果は切り捨てされて3.0になる。
その3.0を格納するresultはintという整数値を入れる入れ物なので、結果は3になってしまう。

では、3.333とするにはどうすればよいか?
以下の様なプログラムに変更すれば実現できます。

int main(void)
{
    float result;

    result = 10.0 / 3.0;

    printf("%f\n", result);

    return 0;
}

3行目・・・int ⇒ floatに変更
      floatという入れ物が存在し、小数点を扱う数値を格納する為の指定になります。

5行目・・・10 / 3の数値同士の計算を、10/0 / 3.0の小数点を含んだ計算とする。

7行目・・・” %f\n ”として、%dが整数値を文字として表示する指定でしたので、
      %fとして、小数値を文字列として表示する指定にします。

これで、ブラウザ実行ツールで実行していただくと、左下の結果の値は3.333333となったと思います。
printf関数の仕様として、デフォルトだと小数点以下は6桁までの表示となっていますので、
.333333と小数点以下は6個3が並んでいると思います。

この辺りの四則演算は、実際の制御でも関わってきますので十分に理解を深めてください。
PWM制御やA/D変換の分解能を最大限得ようとすると、小数点を扱う演算になったり、
演算結果がどのように処理されるのがC言語なのか?を知っておかねば、意図通りの結果にならずに苦労をすることになります。

数値の種類

小数値を扱う解説をしましたので補足的になりますが、数値には整数と実数があります。
整数は、1,2,3,4,5といった数値のことです。
実数は、整数値 + 小数値となった数値のことです。

整数には3種類の記述方法があります。
 通常の数値・・・10進数(普段使用している数値 9から10になった時点で桁上がりする)
 0が先頭についた数値・・・8進数(7から8になった時点で桁上がりする)
 0xが先頭についた数値・・・16進数(15から16になった時点で桁上がりする)

10進数は、1,2,3,4,5,6といった記述です。
9の次は2桁にして10と書きますね?

8進数は、01,02,03,04,05,06といった記述です。
     07の次は桁上がりするので、08とは書かず010となります。

16進数は、0x01,0x02,0x03,0x04,0x05,0x06といった記述です。
     0x09以降は0x0A,0x0B,0x0Cとアルファベット表記に変わります。
     0x0Fが15を表すのですが、0x0Gとは書かず0x10と桁上がりします。
     アルファベットは、小文字と大文字は区別されないのでどちらでも構いません。
 
C言語をはじめとしたプログラミング言語では、10進数と16進数は頻繁に使用します。
8進数は特定用途になりますが、16進数の扱いは習得される必要があります。

実数の計算

上記で小数点をfloatという少数値を格納する入れ物で扱うことを解説しましたので、補足的な内容となりますが、実数では %演算子での計算はできません。
実数(=小数値)では剰余算できませんので、プログラムで指定してもエラーとなります。

剰余算のプログラムも、製品組み込みプログラミングで、ちょくちょく出てきます。
乱数を発生させたり、特定用途にはなりますが、手段として活用することがあります。